package co.yixiang.modules.shop.service.impl;

import co.yixiang.modules.shop.domain.YxStoreQuestionnaire;
import co.yixiang.modules.shop.repository.YxStoreQuestionnaireRepository;
import co.yixiang.modules.shop.service.YxStoreQuestionnaireService;
import co.yixiang.modules.shop.service.dto.YxStoreQuestionnaireDTO;
import co.yixiang.modules.shop.service.dto.YxStoreQuestionnaireQueryCriteria;
import co.yixiang.modules.shop.service.mapper.YxStoreQuestionnaireMapper;
import co.yixiang.utils.PageUtil;
import co.yixiang.utils.QueryHelp;
import co.yixiang.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
* @author frq
* @date 2020-05-29
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class YxStoreQuestionnaireServiceImpl implements YxStoreQuestionnaireService {
    @Autowired
    private  YxStoreQuestionnaireRepository yxStoreQuestionnaireRepository;
    @Autowired
    private  YxStoreQuestionnaireMapper yxStoreQuestionnaireMapper;



    @Override
    public Map<String,Object> queryAll(YxStoreQuestionnaireQueryCriteria criteria, Pageable pageable){
        Page<YxStoreQuestionnaire> page = yxStoreQuestionnaireRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
        return PageUtil.toPage(page.map(yxStoreQuestionnaireMapper::toDto));
    }

    @Override
    public List<YxStoreQuestionnaireDTO> queryAll(YxStoreQuestionnaireQueryCriteria criteria){
        return yxStoreQuestionnaireMapper.toDto(yxStoreQuestionnaireRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
    }

    @Override
    public YxStoreQuestionnaireDTO findById(Integer id) {
        YxStoreQuestionnaire yxStoreQuestionnaire = yxStoreQuestionnaireRepository.findById(id).orElseGet(YxStoreQuestionnaire::new);
        ValidationUtil.isNull(yxStoreQuestionnaire.getId(),"YxStoreQuestionnaire","id",id);
        return yxStoreQuestionnaireMapper.toDto(yxStoreQuestionnaire);
    }

    @Override
    //@CacheEvict(allEntries = true)
    @Transactional(rollbackFor = Exception.class)
    public YxStoreQuestionnaireDTO create(YxStoreQuestionnaire resources) {
        return yxStoreQuestionnaireMapper.toDto(yxStoreQuestionnaireRepository.save(resources));
    }

    @Override
    //@CacheEvict(allEntries = true)
    @Transactional(rollbackFor = Exception.class)
    public void update(YxStoreQuestionnaire resources) {
        YxStoreQuestionnaire yxStoreQuestionnaire = yxStoreQuestionnaireRepository.findById(resources.getId()).orElseGet(YxStoreQuestionnaire::new);
        ValidationUtil.isNull( yxStoreQuestionnaire.getId(),"YxStoreQuestionnaire","id",resources.getId());
        yxStoreQuestionnaire.copy(resources);
        yxStoreQuestionnaireRepository.save(yxStoreQuestionnaire);
    }

    @Override
    //@CacheEvict(allEntries = true)
    public void deleteAll(Integer[] ids) {
        for (Integer id : ids) {
            yxStoreQuestionnaireRepository.deleteById(id);
        }
    }


}